package com.tao.utils;

import org.springframework.beans.BeanUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 季伟
 * 功能：
 */
public class BeanCopyUtils {
    private BeanCopyUtils(){
    }

    /**
     * 通过传入的class创建对应类型的实例
     * 并将source的属性值复制到该实例上
     * 最后返回出去
     * @param source 属性值的来源
     * @param clazz 复制目标的类型,使用类名+'.class'传入
     * @return 复制完成的bean
     */
    public static <E,V> V copyBean(E source,Class<V> clazz){
        V result = null;
        try {
            result = clazz.newInstance();
            BeanUtils.copyProperties(source,result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    public static <E,V> List<V> copyBeanList(List<E> list,Class<V> clazz){
        return list.stream()
                .map(o -> copyBean(o,clazz))//对每个元素调用map参数中所指定的函数并将该结果替换掉原来的元素。o：当前元素;'->'后面是调用后的返回结果也就是替换后的新元素
                .collect(Collectors.toList());//将流收集为集合返回此处是转为list返回
    }
}
